package cn.topcodes.tcsf.admin.service;

import cn.topcodes.tcsf.admin.commons.domain.Page;
import cn.topcodes.tcsf.admin.commons.generic.IGenericService;
import cn.topcodes.tcsf.admin.domain.entity.SystemProperty;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 系统属性管理服务
 * @author 大爱阳哥
 *
 */
public interface SystemPropertyService extends IGenericService<SystemProperty> {
	
	/*管理后台站点名称*/
	public static final String SYS_PROP_ADMIN_BG_SITE_NAME = "SYS_PROP_ADMIN_BG_SITE_NAME";

	/*后台管理主页*/
	public static final String HOME_PAGE = "HOME_PAGE";
	
	/*管理后台站点图标*/
	public static final String SYS_PROP_ADMIN_BG_SITE_LOGO = "SYS_PROP_ADMIN_BG_SITE_LOGO";
	
	/*公司名称*/
	public static final String SYS_PROP_COMPANY_NAME = "SYS_PROP_COMPANY_NAME";
	
	/*公司地址*/
	public static final String SYS_PROP_COMPANY_ADDRESS = "SYS_PROP_COMPANY_ADDRESS";
	
	/*联系电话*/
	public static final String SYS_PROP_TEL = "SYS_PROP_TEL";
	
	/*联系邮箱*/
	public static final String SYS_PROP_EMAIL = "SYS_PROP_EMAIL";
	
	/*版权信息*/
	public static final String SYS_PROP_COPY_RIGHT = "SYS_PROP_COPY_RIGHT";
	
	/*备案号*/
	public static final String SYS_PROP_RECORD_NUMBER = "SYS_PROP_RECORD_NUMBER";
	
	/*是否开启系统访问日志记录功能*/
	public static final String SYS_PROP_ACCESS_LOG_ON = "SYS_PROP_ADMIN_BG_ACCESS_LOG_ON";
	
	/*SMTP服务器地址*/
	public static final String SYS_PROP_SMTP_SERVER_IP = "SYS_PROP_SMTP_SERVER_IP";
	
	/*SMTP服务器端口*/
	public static final String SYS_PROP_SMTP_SERVER_PORT = "SYS_PROP_SMTP_SERVER_PORT";
	
	/*SMTP账号*/
	public static final String SYS_PROP_SMTP_ACCOUNT = "SYS_PROP_SMTP_ACCOUNT";
	
	/*SMTP密码*/
	public static final String SYS_PROP_SMTP_PASSWORD = "SYS_PROP_SMTP_PASSWORD";

	/*最后授权验证时间*/
	public static final String SYS_PROP_LAST_VALID_TIME = "SYS_PROP_LAST_VALID_TIME";

	/*系统安装时间*/
	public static final String SYS_PROP_INSTALL_TIME = "SYS_PROP_INSTALL_TIME";

	/*系统授权码*/
	public static final String SYS_PROP_REGISTER_CODE = "SYS_PROP_REGISTER_CODE";

	/**
	 * 添加系统属性
	 * @param name	属性名称
	 * @param value	属性值
	 */
	public void createSysProp(String name, String value);
	
	/**
	 * 修改系统属性
	 * @param name		属性名称
	 * @param value		属性值
	 */
	public void modifySysProp(String name, String value);

	@Transactional(readOnly = false, rollbackFor = Exception.class)
	void setSysProp(String name, Object value);

	/**
	 * 删除系统属性
	 * @param propId	系统属性ID
	 */
	public void deleteSysProp(String name);
	
	/**
	 * 获取系统属性
	 * @param propId	系统属性ID
	 * @return 
	 */
	public SystemProperty findSysProp(String name);
	
	/**
	 * 查询系统属性列表
	 * @param name	属性名称（模糊查询）
	 */
	public List<SystemProperty> listSysProp(String name);
	
	/**
	 * 分页查询系统属性列表
	 * @param pageNumber	页号
	 * @param pageSize	行数
	 * @param name	属性名称（模糊查询）
	 */
	public Page<SystemProperty> pageSysProp(int pageNumber, int pageSize, String name);
	
	/**
	 * 通过属性名称获取值
	 * 传入类型将对值自动转换类型
	 * @param name
	 * @param clazz
	 * @return
	 */
	public <T> T findSysProperty(String name, Class<T> clazz, T defaultValue);
	
	/**
	 * 是否打开系统访问日志记录功能
	 * @return
	 */
	public boolean isAccessLogOn();
	
}
